using System;
using System.Linq;
using ColorBox4Sitecore.Helpers;
using Sitecore.Data.Items;
using Sitecore.Diagnostics;

namespace ColorBox4Sitecore.Colorbox
{
    public class ColorboxDefaultValuesSitecore
    {
        public Item DefaultValues { get; set; }

        public ColorboxDefaultValuesSitecore(Item item)
        {
            Assert.IsNotNull(item, "ColorboxDefaultValues - ColorboxDefaultValues(Item item) - The item is parameter cannot be null");
            Item templateItem = item.Template.InnerItem;
            Assert.IsNotNull(templateItem, String.Format("ColorboxDefaultValues - ColorboxDefaultValues(Item item) - Cannot retreive the inner item from the template: '{0}'", templateItem.Paths.FullPath));

            DefaultValues = (from c in templateItem.Children
                             where c.Name == "__Default Values"
                             select c).FirstOrDefault();

            if (DefaultValues == null) //If no default values for this template
                DefaultValues = item.Database.GetItem(ColorboxIDs.ColorboxDefaultStandardValues); //Retrieve the standard values of the Colorbox Default tempalte

            Assert.IsNotNull(DefaultValues, string.Format("ColorboxDefaultValues - ColorboxDefaultValues(Item item) - Cannot retreive the default values for the template: '{0}'", templateItem.Paths.FullPath));
        }

        #region Properties
        public string SelectorCssClass { get { return DefaultValues.GetStringValueFromField("Selector Css Class"); } }

        public ColorboxTransition Transition { get { return DefaultValues.GetColorboxTransitionValueFromField("Transition", ColorboxDefaultValues.Transition); } }
        public int Speed { get { return DefaultValues.GetIntValueFromField("Speed", ColorboxDefaultValues.Speed); } }
        public bool ScalePhotos { get { return DefaultValues.GetBoolValueFromField("Scale Photos", ColorboxDefaultValues.ScalePhotos); } }
        public bool Scrolling { get { return DefaultValues.GetBoolValueFromField("Scrolling", ColorboxDefaultValues.Scrolling); } }

        public string Href { get { return DefaultValues.GetUrlFromGeneralLink("Href", ColorboxDefaultValues.Href); } }
        public string Title { get { return DefaultValues.GetStringValueFromField("Title", ColorboxDefaultValues.Title); } }
        public string Rel { get { return DefaultValues.GetStringValueFromField("Rel", ColorboxDefaultValues.Rel); } }
        public string Current { get { return DefaultValues.GetStringValueFromField("Current", ColorboxDefaultValues.Current); } }
        public string Previous { get { return DefaultValues.GetStringValueFromField("Previous", ColorboxDefaultValues.Previous); } }
        public string Next { get { return DefaultValues.GetStringValueFromField("Next", ColorboxDefaultValues.Next); } }
        public string Close { get { return DefaultValues.GetStringValueFromField("Close", ColorboxDefaultValues.Close); } }
        public string XhrError { get { return DefaultValues.GetStringValueFromField("XhrError", ColorboxDefaultValues.XhrError); } }
        public string ImgError { get { return DefaultValues.GetStringValueFromField("ImgError", ColorboxDefaultValues.ImgError); } }

        public int Opacity { get { return DefaultValues.GetIntValueFromField("Opacity", ColorboxDefaultValues.Opacity); } }
        public bool Open { get { return DefaultValues.GetBoolValueFromField("Open", ColorboxDefaultValues.Open); } }
        public bool ReturnFocus { get { return DefaultValues.GetBoolValueFromField("Return Focus", ColorboxDefaultValues.ReturnFocus); } }
        public bool FastIframe { get { return DefaultValues.GetBoolValueFromField("Fast Iframe", ColorboxDefaultValues.FastIframe); } }
        public bool Preloading { get { return DefaultValues.GetBoolValueFromField("Preloading", ColorboxDefaultValues.Preloading); } }
        public bool OverlayClose { get { return DefaultValues.GetBoolValueFromField("Overlay Close", ColorboxDefaultValues.OverlayClose); } }
        public bool EscKey { get { return DefaultValues.GetBoolValueFromField("Esc Key", ColorboxDefaultValues.EscKey); } }
        public bool ArrowKey { get { return DefaultValues.GetBoolValueFromField("Arrow Key", ColorboxDefaultValues.ArrowKey); } }
        public bool Loop { get { return DefaultValues.GetBoolValueFromField("Loop", ColorboxDefaultValues.Loop); } }
        public bool Data { get { return DefaultValues.GetBoolValueFromField("Data", ColorboxDefaultValues.Data); } }

        public bool Iframe { get { return DefaultValues.GetBoolValueFromField("Iframe", ColorboxDefaultValues.Iframe); } }
        public bool Inline { get { return DefaultValues.GetBoolValueFromField("Inline", ColorboxDefaultValues.Inline); } }
        public string Html { get { return DefaultValues.GetStringValueFromField("Html", ColorboxDefaultValues.Html); } }
        public bool Photo { get { return DefaultValues.GetBoolValueFromField("Photo", ColorboxDefaultValues.Photo); } }

        public int? Width { get { return DefaultValues.GetIntValueFromField("Width", ColorboxDefaultValues.Width); } }
        public ColorboxUnit WidthUnit { get { return DefaultValues.GetColorboxUnitValueFromField("Width Unit", ColorboxDefaultValues.WidthUnit); } }
        public int? Height { get { return DefaultValues.GetIntValueFromField("Height", ColorboxDefaultValues.Height); } }
        public ColorboxUnit HeightUnit { get { return DefaultValues.GetColorboxUnitValueFromField("Height Unit", ColorboxDefaultValues.HeightUnit); } }
        public int? InnerWidth { get { return DefaultValues.GetIntValueFromField("Inner Width", ColorboxDefaultValues.InnerWidth); } }
        public ColorboxUnit InnerWidthUnit { get { return DefaultValues.GetColorboxUnitValueFromField("Inner Width Unit", ColorboxDefaultValues.InnerWidthUnit); } }
        public int? InnerHeight { get { return DefaultValues.GetIntValueFromField("Inner Height", ColorboxDefaultValues.InnerHeight); } }
        public ColorboxUnit InnerHeightUnit { get { return DefaultValues.GetColorboxUnitValueFromField("Inner Height Unit", ColorboxDefaultValues.InnerHeightUnit); } }
        public int? InitialWidth { get { return DefaultValues.GetIntValueFromField("Initial Width", ColorboxDefaultValues.InitialWidth); } }
        public ColorboxUnit InitialWidthUnit { get { return DefaultValues.GetColorboxUnitValueFromField("Initial Width Unit", ColorboxDefaultValues.InitialWidthUnit); } }
        public int? InitialHeight { get { return DefaultValues.GetIntValueFromField("Initial Height", ColorboxDefaultValues.InitialHeight); } }
        public ColorboxUnit InitialHeightUnit { get { return DefaultValues.GetColorboxUnitValueFromField("Initial Height Unit", ColorboxDefaultValues.InitialHeightUnit); } }
        public int? MaxWidth { get { return DefaultValues.GetIntValueFromField("Max Width", ColorboxDefaultValues.MaxWidth); } }
        public ColorboxUnit MaxWidthUnit { get { return DefaultValues.GetColorboxUnitValueFromField("Max Width Unit", ColorboxDefaultValues.MaxWidthUnit); } }
        public int? MaxHeight { get { return DefaultValues.GetIntValueFromField("Max Height", ColorboxDefaultValues.MaxHeight); } }
        public ColorboxUnit MaxHeightUnit { get { return DefaultValues.GetColorboxUnitValueFromField("Max Height Unit", ColorboxDefaultValues.MaxHeightUnit); } }

        public bool SlideshowEnable { get { return DefaultValues.GetBoolValueFromField("Slideshow Enable", ColorboxDefaultValues.SlideshowEnable); } }
        public int SlideshowSpeed { get { return DefaultValues.GetIntValueFromField("Slideshow Speed", ColorboxDefaultValues.SlideshowSpeed); } }
        public bool SlideshowAuto { get { return DefaultValues.GetBoolValueFromField("Slideshow Auto", ColorboxDefaultValues.SlideshowAuto); } }
        public string SlideshowStartText { get { return DefaultValues.GetStringValueFromField("Slideshow Start Text", ColorboxDefaultValues.SlideshowStartText); } }
        public string SlideshowEndText { get { return DefaultValues.GetStringValueFromField("Slideshow End Text", ColorboxDefaultValues.SlideshowEndText); } }

        public bool Fixed { get { return DefaultValues.GetBoolValueFromField("Fixed", ColorboxDefaultValues.Fixed); } }
        public int? Top { get { return DefaultValues.GetIntValueFromField("Top", ColorboxDefaultValues.Top); } }
        public ColorboxUnit TopUnit { get { return DefaultValues.GetColorboxUnitValueFromField("Top Unit", ColorboxDefaultValues.TopUnit); } }
        public int? Bottom { get { return DefaultValues.GetIntValueFromField("Bottom", ColorboxDefaultValues.Bottom); } }
        public ColorboxUnit BottomUnit { get { return DefaultValues.GetColorboxUnitValueFromField("Bottom Unit", ColorboxDefaultValues.BottomUnit); } }
        public int? Left { get { return DefaultValues.GetIntValueFromField("Left", ColorboxDefaultValues.Left); } }
        public ColorboxUnit LeftUnit { get { return DefaultValues.GetColorboxUnitValueFromField("Left Unit", ColorboxDefaultValues.LeftUnit); } }
        public int? Right { get { return DefaultValues.GetIntValueFromField("Right", ColorboxDefaultValues.Right); } }
        public ColorboxUnit RightUnit { get { return DefaultValues.GetColorboxUnitValueFromField("Right Unit", ColorboxDefaultValues.RightUnit); } }


        public Item[] SlideshowPictures { get { return DefaultValues.GetItemsFromMultilistField("Slideshow Pictures"); }}

        public string AdditionalProperties { get { return DefaultValues.GetStringValueFromField("Additional Properties"); } }


        #endregion
    }
}